package com.wxxymaker.service;

import com.wxxymaker.model.entity.MarkRecord;
import com.wxxymaker.model.entity.Shop;
import com.wxxymaker.model.entity.Stage;
import com.wxxymaker.model.entity.User;
import org.springframework.data.domain.Page;

import java.util.Map;

/**
 * 打分记录业务层接口
 */
public interface MarkRecordService extends BaseService<MarkRecord> {

    /**
     * 分页查询
     * @param map    动态查询条件
     *               条件主要包括 stage_id, user_id, shop_id, 甚至可以是其他有的字段
     * @param pageNo 页码
     * @param size   每页条数
     * @return       Page 对象
     */
    Page<MarkRecord> page(Map<String, Object> map, Integer pageNo, Integer size);

    /**
     * 分页查询，默认每页12条数据
     */
    Page<MarkRecord> page(Map<String, Object> map, Integer pageNo);

    /**
     * 无任何条件的分页查询，每页12条数据
     */
    Page<MarkRecord> page(Integer pageNo);

    /**
     * 判断该条记录是否已经存在
     * 用户判断是否可以进行打分
     * @param user  用户, 包涵id
     * @param shop  公司, 包涵id
     * @param stage 评分阶段, 包涵id
     */
    boolean isHas(User user, Shop shop, Stage stage);

    /**
     * 判断记录是否存在，用来判断是否能增加阶段中的打分人数
     * @param user  用户, 包涵id
     * @param stage 评分阶段, 包涵id
     */
    boolean isHas(User user, Stage stage);

    /**
     * 判断记录是否存在，用来判断是否能增加阶段中的打分人数
     * @param uid  用户id
     * @param sid 阶段id
     */
    boolean isHas(int uid, int sid);

    /**
     * 根据阶段、公司、星级进行统计个数
     * @param stage 打分阶段
     * @param shop  被打分公司
     * @param star  打分星级
     * @return 记录条数
     */
    long countForStar(Stage stage, Shop shop, Integer star);

    /**
     * 统计指定阶段的参与人数
     * @param stage 阶段，必须带id
     */
    long getUserNum(Stage stage);
}
